package fr.cie.blog.modeldao.sql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;

import fr.cie.blog.beans.Card;
import fr.cie.blog.beans.Style;
import fr.cie.blog.domainservice.IServiceStyle;
import fr.cie.blog.modeldao.services.GestionBaseDeDonnees;
import fr.cie.blog.modeldao.services.Mapper;

/**
 * @author AetM
 * 
 */
public class StyleDaoImplSql extends ModelDAO implements IServiceStyle {

	/**
	 * Log4J the logger.
	 */
	private static final Logger LOG = Logger.getLogger(StyleDaoImplSql.class);

	// Properties Sql

	/**
	 * connection.
	 */
	private Connection connection = null;

	/**
	 * result.
	 */
	private ResultSet result = null;

	/**
	 * styleList.
	 */
	private static List<Style> styleList;

	// Mapping properties
	/**
	 * mapper.
	 */
	private final Mapper mapper = new Mapper();

	@Override
	public final int save(final Style style) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public final int delete(final Style style) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public final List<Style> findAll() {

		// Variables
		PreparedStatement requete = null;
		Style style;
		String requeteString;
		styleList = new ArrayList<Style>();

		try {
			// Ouverture d'une connexion
			connection = super.getConnection();

			// requete pour la liste des styles
			requeteString = "SELECT * FROM Style WHERE 1 ORDER BY id";
			requete = connection.prepareStatement(requeteString);

			// Execution de la requête
			result = requete.executeQuery();

			// On stocke le resultat dans une liste
			if (result != null) {
				while (result.next()) {
					// On effectue le mapping des attributs avec les champs de
					// la table SQL
					style = mapper.mapperStyle(result);

					// On ajoute l'objet a la liste des styles
					styleList.add(style);
				}
			}
		} catch (final Exception e) {
			LOG.debug("Erreur dans la requete dans la "
					+ "classe StyleDaoImplSql fonction findAll" + e);
		} finally {
			try {
				// Fermeture de la connexion
				if (result != null) {
					GestionBaseDeDonnees.getInstance().closeResulset(result);
				}
				if (requete != null) {
					GestionBaseDeDonnees.getInstance().closeRequest(requete);
				}
				if (connection != null) {
					GestionBaseDeDonnees.getInstance().closeConnection(
							connection);
				}
			} catch (final Exception ex) {
				LOG.debug("Erreur lors de la fermeture de la connexion avec "
						+ "la base de données dans la classe StyleDaoImplSql "
						+ "fonction findAll" + ex);
			}
		}

		// Retourner la liste des s
		return styleList;

	}

	@Override
	public final Style findByCard(final Card card) {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceGeneric#findById(int)
	 */
	@Override
	public final Style findById(final long pIdentifier) {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see fr.cie.blog.domainservice.IServiceStyle#findDefaultStyle()
	 */
	@Override
	public final Style findDefaultStyle() {
		// Variables
		PreparedStatement requete = null;
		String requeteString = null;
		Style style = null;
		styleList = new ArrayList<Style>();

		try {
			// Ouverture d'une connexion
			connection = super.getConnection();

			// requete pour la liste des clients
			requeteString = "SELECT * FROM Style WHERE status = 'default'";
			requete = connection.prepareStatement(requeteString);

			// Execution de la requête
			result = requete.executeQuery();

			// On stocke le resultat dans une liste
			if (result != null && result.first()) {
				style = mapper.mapperStyle(result);
			}
		} catch (final Exception e) {
			LOG.debug("Erreur dans la requete dans la "
					+ "classe StyleDaoImplSql fonction findDefaultStyle" + e);
		} finally {
			try {
				// Fermeture de la connexion
				if (result != null) {
					GestionBaseDeDonnees.getInstance().closeResulset(result);
				}
				if (requete != null) {
					GestionBaseDeDonnees.getInstance().closeRequest(requete);
				}
				if (connection != null) {
					GestionBaseDeDonnees.getInstance().closeConnection(
							connection);
				}
			} catch (final Exception ex) {
				LOG.debug("Erreur lors de la fermeture de la connexion avec "
						+ "la base de données dans la classe StyleDaoImplSql "
						+ "fonction findDefaultStyle" + ex);
			}
		}

		// Retourner la liste des clients
		return style;

	}

	@Override
	public final int update(final Style style) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public final Style findByName(final String pName) {
		// TODO Auto-generated method stub
		return null;
	}

}